class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        // 准备，找到目标最大连续子数组，sum = sums - target

        // int size = nums.size();
        // int sum, sums, left, right;
        // left = right = 0;
        
        // for(auto a : nums) sums += a;
        // int x = sums - target;
        // // 细节问题
        // if(x < 0) return -1;

        // int ret = -1;
        // // 进窗口
        // while(right < size)
        // {
        //     sum += nums[right++];
        //     while(sum > x)// 判断
        //     {
        //         // 出窗口
        //         sum -= nums[left++];
        //     }
        //     if(sum == x) ret = max(ret, right - left + 1);
        // }
        // if(ret == -1) return -1;
        // else return size - ret;

        int size = nums.size();
        int sums = 0;
        for(int a : nums) sums += a;
        int x = sums - target;
        if(x < 0) return 0;
        if(x == 0) return size;

        int ret = 0;
        for(int left = 0, right = 0, tmp = 0; right < size; right++)
        {
            tmp += nums[right];
            while(tmp > x && left <= right) tmp -= nums[left++];
            if(tmp == x) ret = max(ret, right - left + 1);
        }

        return ret == 0 ? ret : size - ret;

    }
};

